自動化是 DevOps 裡非常重要的一環,應儘可能的把流程都自動化。我們可以透過Jenkins等CI工具來達成以下的自動化。
自動單元測試
自動UI測試
自動程式碼檢核
自動發佈Beta App給測試人員
自動簽署APK
自動發佈App至Google Play
透過Slack、Email即時通知
你可以參考我的實體書,更完整的自動化流程
天瓏網路書店:Android TDD 測試驅動開發:從UnitTest、TDD到DevOps實踐
而這篇將介紹 Jenkins 這個 CI 工具來進行自動測試。
Jenkins是一個功能強大的持續整合工具,有豐富的外掛可以供開發人員使用,可以將建置專案、測試、分析及部署等工作自動化,讓App工程師可以專注在開發及撰寫單元測試。
Jenkins需要透過Homebrew來安裝。Homebrew是一個可以方便在Mac上管理套件的工具。
在「終端機」上輸入指令,安裝HomeBrew。
/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
HomeBrew安裝完後,接著在終端機輸入以下指令來安裝Jenkinsbrew install jenkins
安裝完成後,輸入啟動 Jenkins的指令:brew services start jenkins
啟動完成後,在瀏覽器輸入網址 http://127.0.0.1:8080/就可以開啟Jenkins。在第一次啟用時需要輸入管理員密碼。
在這個目錄下 /Users/{UserName}/.jenkins/secrets/initialAdminPassword
可以找到預設的管理員密碼。
回到Unlock Jenkins的網頁上輸入 Administrator password 。
因為.jenkins是一個隱藏的資料夾,如果在目錄下看不到的話,請先開啟Finder,按下 Shift + command + >,即可顯示隱藏檔。
Jenkins啟動之後,勾選要安裝的功能後點選Install。
安裝完成後,輸入First Admin User 資料。
看到Jenkins is ready就代表完成了。
Jenkins啟動後,將會依照你的瀏覽器語言作為預設語言,Jenkins的中文翻譯還不是很完整,我們把它調整為英文。在後續的說明會比較一致。
點選管理Jenkins,點選管理外掛程式,安裝Locale。
回到管理Jenkins裡,點選設定系統,預設語言輸入en_US,勾選下方的Ignore browser preference and force this language to all users。設定完成後,Jenkins就會成功調整為英文了。
再次回到Jenkins首頁,就可以看到都是用英文顯示了。
在Jenkins首頁,點選 Manage Jenkins,點選Configure System。在Global properties裡設定Android_Home。如果你已經安裝Android Studio,Android SDK 會被安裝在:/Users/{UserName}/Library/Android/sdk
。
設定ANDROID_HOME
Jenkins可以透過安裝不同的外掛來強化功能。
安裝Gradle Plugin。Gradle可以用在Android專案的編譯、測試及檢查程式碼。安裝Gradle Plugin就可以在Jenkins執行Gradle指令。
安裝外掛Gradle Plugin
安裝 Git Plugin
安裝完之後,需要再設定git路徑。在Manage Jenkins -> Global Tool Configuration設定Git的路徑。你可以在終端機輸入$ which git,查詢git在本機的安裝路徑。
當開發人員將程式碼合併到儲存庫時,我們希望Jenkins能自動從Git Server下載程式碼並建置。這個建置是非常基本且重要的,當有程式碼提交而無法編譯成功時,你可以馬上發現錯誤。越早發現,就越早修正。
Jenkins首頁的左邊功能列,點選New Item(新增作業)。
輸入Item Name,也就是作業名稱,點選 Freestyle project 後,再點選下方的「OK」。
Source Code Management
在Source Code Management的Repository Url 填入Git Repository 網址。如果你的Repository不是公開的,則需要在Credentials新增帳號及密碼資訊。接著在Branch Specifier 輸入要Pull的分支。
Builder Trigger (建置觸發程序)
設定完程式碼儲存庫的路徑後,接著從Builder Trigger去設定執行的時機,勾選Poll SCM。我們先指定每10分鐘執行一次。
Schedule裡的5個數字依序為:
分:一小時中的第幾分鐘。
時:一天中的第幾小時。
日:一個月的第幾天。
月:一年中的第幾月。
星期:星期幾,0、7都代表星期日。
*代表適用所有數字
例:每天晚上8點建置
0 20 * * *
例:每30分建置一次
H/30 * * * *
例:週一到週五,每天的9:00~18:00,每隔兩小時建置一次
0 9–18/2 * * 1–5
接著設定建置專案,在Build裡點選 Add build step ,接著選擇Invoke Gradle script,這表示著我們將使用Gradle指令來建置專案。
選擇Use Gradle wrapper,在Tasks 輸入指令 build,這裡的build 指令就如同你在Android Studio 上執行build Project是一樣的。
儲存後,Jenkins專案內容頁。點選Build Now,就會馬上開始建置了。
執行之後,在Build History可以看到正在建置中。第一次建置通常會花比較多時間,因為還要從程式碼儲存庫下載程式碼。
執行完後看到藍燈,代表建置成功。藍色Icon的#1則代表第1次建置。
點進去可看到詳細建置過程及結果Console Output。
回到首頁,你可以在任務的列表,看到剛剛建立的First Build。同樣會顯示上一次的建置結果為藍燈。
S指的是Status,W指的是Weather。當S呈現紅色表示建置失敗,而W表示近期建置的狀況。
當有失敗的時候,也不要害怕,建置失敗是一件很平常的事情。而這也正是我們的目的:即早發現錯誤,並修正。如果有失敗,應儘速將失敗的建置修正,再開始新的任務。而如果無法快速修復,應儘快將它恢復到前一個可用的版本。
最後建置的專案被下載在/Users/{Use}/.jenkins/workspace/{ProjectName}
,你可以在這裡找到被下載的程式碼
查看測試報表
Jenkins 也能用來自動執行單元測試。建置指令build就包含建置專案與執行單元測試。你可以在 app/build/reports/tests/testDebugUnitTest/index.html
這個路徑找到單元測試的結果。
從測試報告呈現了成功及失敗的數量、測試成功的百分比。你可以依照Packages或Classes分類來看。
點進去Package的Classes裡,可以再看到每一個測試案例的結果及執行時間。
如果失敗的話,也能看到哪些測試案例是失敗的。
完整的Android自動化:你可以參考我的實體書
天瓏網路書店:Android TDD 測試驅動開發:從UnitTest、TDD到DevOps實踐
自動單元測試、自動UI測試、自動程式碼檢核、自動發佈Beta App給測試人員、自動簽署APK、自動發佈App至Google Play、透過Slack、Email即時通知。
Android 線上課程
Android 動畫入門到進階
Android UI 進階實戰(Material Design Component)
medium:
https://medium.com/@evanchen76